#define _DOUBLE_LIST_VER2

struct d_node;
typedef struct d_node _DNode;
typedef struct d_node *_DList;

extern _DNode *create_node(void);
extern int init_node(_DNode *node, const void *arg);
extern int destroy_node(_DNode *node);
extern _DList create_list(void);
extern int flush_list(_DList head);
extern int insert_to_list(_DList head, _DNode *node);
extern int delete_node(_DList head, void *key);
extern void print_list(_DList head);
extern int for_each_node(_DList head, void *(*func)(void *));
